/**
 * 认证工具模块
 * 管理用户的登录状态、token、用户信息等
 */

// Token 存储键名
const TOKEN_KEY = 'token'
const USER_INFO_KEY = 'userInfo'

// 用户信息接口（根据实际后端数据结构调整）
export interface UserInfo {
  id: string | number
  username: string
  email?: string
  avatar?: string
  roles?: string[]
  [key: string]: any
}

/**
 * 获取 token
 */
export const getToken = (): string | null => {
  return localStorage.getItem(TOKEN_KEY)
}

/**
 * 设置 token
 */
export const setToken = (token: string): void => {
  localStorage.setItem(TOKEN_KEY, token)
}

/**
 * 移除 token
 */
export const removeToken = (): void => {
  localStorage.removeItem(TOKEN_KEY)
}

/**
 * 获取用户信息
 */
export const getUserInfo = (): UserInfo | null => {
  const userInfoStr = localStorage.getItem(USER_INFO_KEY)
  if (!userInfoStr) return null
  try {
    return JSON.parse(userInfoStr) as UserInfo
  } catch {
    return null
  }
}

/**
 * 设置用户信息
 */
export const setUserInfo = (userInfo: UserInfo): void => {
  localStorage.setItem(USER_INFO_KEY, JSON.stringify(userInfo))
}

/**
 * 移除用户信息
 */
export const removeUserInfo = (): void => {
  localStorage.removeItem(USER_INFO_KEY)
}

/**
 * 检查用户是否已登录
 */
export const isAuthenticated = (): boolean => {
  const token = getToken()
  return !!token // 简单判断：有 token 就认为已登录
  // 实际项目中，可能需要验证 token 是否过期
}

/**
 * 清除所有认证信息（登出）
 */
export const clearAuth = (): void => {
  removeToken()
  removeUserInfo()
}

/**
 * 检查用户是否有指定角色（用于角色权限控制）
 */
export const hasRole = (role: string): boolean => {
  const userInfo = getUserInfo()
  if (!userInfo || !userInfo.roles) return false
  return userInfo.roles.includes(role)
}

/**
 * 检查用户是否有指定权限（用于功能权限控制）
 */
export const hasPermission = (permission: string): boolean => {
  const userInfo = getUserInfo()
  // 这里可以根据实际业务逻辑实现权限检查
  // 例如：检查 userInfo.permissions 数组中是否包含该权限
  return true // 默认返回 true，实际使用时替换为真实逻辑
}

